package org.yak.core.web;
import java.util.HashMap;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.JavaIdentifierTransformer;

/**
 * 自定义map查询集合,用于用户获取查询的集合数据
 * @author xuqiang
 *
 */
public class ResultSet extends HashMap<String,Object>{

	/**
	 * 大写
	 */
	public static final String UPPERCASE = "UpperCase";
	
	/**
	 * 小写
	 */
	public static final String LOWERCASE = "LowerCase";
	
	private static final long serialVersionUID = 1L;

	/**
	 * 获取key对应对象值,key为大写
	 * @param key
	 * @return
	 */
	public Object get(String key){
		return super.get(key.toUpperCase());
	}
	
	/**
	 * 获取key对应的对象，
	 * @param key
	 * @param cell_type key的获取方式，ResultSet.UPPERCASE：大写key，ResultSet.LOWERCASE:小写key
	 * @return
	 */
	public Object get(String key,String cell_type) {
		if(UPPERCASE.equals(cell_type)) {
			return super.get(key.toUpperCase());
		}else if(LOWERCASE.equals(cell_type)) {
			return super.get(key.toLowerCase());
		}else {
			return get(key);
		}
	}
	
	/**
	 * 转换成json对象
	 * @return
	 */
	public JSONObject trans2JSON() {
		return JSONObject.fromObject(this);
	}
	
	/**
	 * 结果集转换成bean对象,bean实体属性为小写
	 * @param clazz
	 * @return
	 */
	public Object trans2Bean(Class<?> clazz) {
		//默认为小写转换
		JsonConfig config = new JsonConfig();
        config.setJavaIdentifierTransformer(new JavaIdentifierTransformer() {
            @Override
            public String transformToJavaIdentifier(String str) {
            	return str.toLowerCase();
            }
        });
        config.setRootClass(clazz);
		return JSONObject.toBean(trans2JSON(),config);
	}
	
	/**
	 * 结果集转换成bean,bean实体属性为大写
	 * @param clazz 转换对象
	 * @return
	 */
	public Object trans2UpperCaseBean(Class<?> clazz) {
		JsonConfig config = new JsonConfig();
        config.setJavaIdentifierTransformer(new JavaIdentifierTransformer() {
            @Override
            public String transformToJavaIdentifier(String str) {
            	return str.toUpperCase();
            }
        });
        config.setRootClass(clazz);
		return JSONObject.toBean(trans2JSON(),config);
	}
}